第14章 設計:時間の重要性
本章ではインクリメンタルな設計をメインに、技術的、経済的、人間的な理由を深掘りしていく
ソフトウェアのインクリメンタルな設計は、ハードの世界では通用しない
例えば一度建築したマンションに、階数をふやすような設計はできない。
ただスチュワート・ブランドさんは「How Building Learn」では既存の建築景観から知見をえれば、インクリメンタルな設計もできると言われている
インクリメンタルな設計を行うときには、十分な量のフィードバックを準備して設計に落とし込むスキルが求められる
設計初期は何も設計しない訳ではなく、最初の実装ができる範囲で設計を行う。それ以上の設計は、制約が明らかになってから再度設計を行う。
XPは「何も設計しない」ではなく、「常に設計をする」という戦略ですすめる
いつ設計するかにを議論するために、参考程度三つのステージをグラフにして考える
直感:直感による設計
熟考:真剣に熟考した経験
経験:経験にもとづいた経験
下記の場合は、直感だけでも十分問題ない設計。この場合は、今日から設計を開始しても問題ない
https://scrapbox.io/files/681b68f7750373b9894e9f47.png
下記の場合は、いつ設計するかが明確ではない場合。熟考・経験によって最低限の品質はできるが、直感によって設計することは基本的にない
https://scrapbox.io/files/681b69aed62dd4f46cb8c6a1.png
下記の場合は、インクリメンタルな設計が必要な場合。経験がないまま設計しても、不十分な設計になる
https://scrapbox.io/files/681b6a4fca5223a780af12b1.png
いつ設計するかを決めるときに考慮すべき点は二点
熟考or 経験にどちらかを実施したときに、最大限のバリューを提供できるか
熟考でフィードバックなしでもバリューがだせるなら、すぐに設計する
経験を通じてバリューがだせるなら、現時点では必要最低限の設計をのみを行う。後々、本格的に設計を行う
いつ実施するかによってコストが変わってくること
早めに設計をすれば、初期コストが少なくて済むが、間違い多いと総コストは高くなる(熟考)
最初に最小限の設計をすれば、最小限の設計で完結するが、稼働中に随時設計が発生するので組み込みコストが高くなる(経験)
XPのプラクティスは進行中の設計コストを低下させるためにある
自分がかかわるコードから設計を改善していくこと。少しづつ綺麗にしていく
設計改善に関わるリストを作って対応する
XPにおいて要求されて機能を毎週デリバリーする方が優先度は高く、設計の改善は優先度が低い。
そのために、設計するタイミングを後ろにずらして対応する。そうする事で経験に基づいて設計ができ、意思決定が早くなる
設計をずらすメリット・デメリットは以下
メリット
より早くソフトウェアをデプロイできる
確信を持って意思決定ができる
誤った意思決定を無理に許容する必要はない
当初の設計の前提が変わっても開発ベースを維持できる
デメリット
価値の高い新機能の流れを維持するために、継続的な設計ができないこと
大きな変更を小さく始めることができないこと
シンプリシティ
XPではできるだけシンプルな解決策を好む。
シンプルな設計の基準は以下の4つ
対象者に適している
設計を使う人たちがいかに理解できるか
情報が伝わりやすい
システムのアイデアが表現されているか
システムの要素と用語集の単語は同じにすること
うまく分割されている
ロジックや構造の重複を削減できているか
最小限である
上記の要素守った上で、システムの要素は最小限にすること。
要素が少ないと必要なテスト・ドキュメント・コミュニケーションが少なくて済む